import type { VNode, ComponentPublicInstance } from "vue";
import type { TableColumnCtx } from "element-plus/es/components/table/src/table-column/defaults";
import { GridType } from "@/components/Grid/interface/";

export namespace TableProType {
  // 表格列的类型：序号、筛选框
  export type Type = "selection" | "index" | "expand";

  // 表格具体列的位置
  export type Fixed = true | "left" | "right";

  export interface TableItem {
    type?: "selection" | "index" | "expand";
    align?: "left" | "center" | "right";
    reserveSelection?: boolean; // 数据刷新后是否保留选项，仅对 type=selection 有效
    showOverflowTooltip?: boolean; // 单行显示，多余的内容会在 hover 时以 tooltip 的形式显示出来
    render?: (v: any) => VNode; // 内容 h 函数
    headerRender?: (v: any) => VNode; // 头部 h 函数
  }

  export interface Props {
    columns: ColumnsProps[]; // 列配置项  ==> 必传
    data?: any[]; // 静态 table data 数据，若存在则不会使用 requestApi 返回的 data ==> 非必传
    requestApi?: (params: any) => Promise<any>; // 请求表格数据的 api ==> 非必传
    requestAuto?: boolean; // 是否自动执行请求 api ==> 非必传（默认为true）
    requestError?: (params: any) => void; // 表格 api 请求错误监听 ==> 非必传
    dataCallback?: (data: any) => any; // 返回数据的回调函数，可以对数据进行处理 ==> 非必传
    title?: string; // 表格标题，目前只在打印的时候用到 ==> 非必传
    pagination?: boolean; // 是否需要分页组件 ==> 非必传（默认为true）
    initParam?: any; // 初始化请求参数 ==> 非必传（默认为{}）
    border?: boolean; // 是否带有纵向边框 ==> 非必传（默认为true）
    toolButton?: boolean; // 是否显示表格功能按钮 ==> 非必传（默认为true）
    rowKey?: string; // 行数据的 Key，用来优化 Table 的渲染，当表格数据多选时，所指定的 id ==> 非必传（默认为 id）
    searchCol?: number | Record<GridType.BreakPoint, number>; // 表格搜索项 每列占比配置 ==> 非必传 { xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }
    isShow?: boolean;
  }
}
